home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 008a / perl40_2.zip / ARG.H next >
C/C++ Source or Header  |  1991-11-28  |  20KB  |  1,001 lines

  1. /* $RCSfile: arg.h,v $$Revision: 4.0.1.2 $$Date: 91/11/05 15:51:05 $
  2.  *
  3.  *    Copyright (c) 1991, Larry Wall
  4.  *
  5.  *    You may distribute under the terms of either the GNU General Public
  6.  *    License or the Artistic License, as specified in the README file.
  7.  *
  8.  * $Log:    arg.h,v $
  9.  * Revision 4.0.1.2  91/11/05  15:51:05  lwall
  10.  * patch11: added eval {}
  11.  * patch11: added sort {} LIST
  12.  *
  13.  * Revision 4.0.1.1  91/06/07  10:18:30  lwall
  14.  * patch4: length($`), length($&), length($') now optimized to avoid string copy
  15.  * patch4: new copyright notice
  16.  * patch4: many, many itty-bitty portability fixes
  17.  *
  18.  * Revision 4.0  91/03/20  01:03:09  lwall
  19.  * 4.0 baseline.
  20.  *
  21.  */
  22.  
  23.  
  24. #define O_NULL 0
  25. #define O_RCAT 1
  26. #define O_ITEM 2
  27. #define O_SCALAR 3
  28. #define O_ITEM2 4
  29. #define O_ITEM3 5
  30. #define O_CONCAT 6
  31. #define O_REPEAT 7
  32. #define O_MATCH 8
  33. #define O_NMATCH 9
  34. #define O_SUBST 10
  35. #define O_NSUBST 11
  36. #define O_ASSIGN 12
  37. #define O_LOCAL 13
  38. #define O_AASSIGN 14
  39. #define O_SASSIGN 15
  40. #define O_CHOP 16
  41. #define O_DEFINED 17
  42. #define O_UNDEF 18
  43. #define O_STUDY 19
  44. #define O_POW 20
  45. #define O_MULTIPLY 21
  46. #define O_DIVIDE 22
  47. #define O_MODULO 23
  48. #define O_ADD 24
  49. #define O_SUBTRACT 25
  50. #define O_LEFT_SHIFT 26
  51. #define O_RIGHT_SHIFT 27
  52. #define O_LT 28
  53. #define O_GT 29
  54. #define O_LE 30
  55. #define O_GE 31
  56. #define O_EQ 32
  57. #define O_NE 33
  58. #define O_NCMP 34
  59. #define O_BIT_AND 35
  60. #define O_XOR 36
  61. #define O_BIT_OR 37
  62. #define O_AND 38
  63. #define O_OR 39
  64. #define O_COND_EXPR 40
  65. #define O_COMMA 41
  66. #define O_NEGATE 42
  67. #define O_NOT 43
  68. #define O_COMPLEMENT 44
  69. #define O_SELECT 45
  70. #define O_WRITE 46
  71. #define O_DBMOPEN 47
  72. #define O_DBMCLOSE 48
  73. #define O_OPEN 49
  74. #define O_TRANS 50
  75. #define O_NTRANS 51
  76. #define O_CLOSE 52
  77. #define O_EACH 53
  78. #define O_VALUES 54
  79. #define O_KEYS 55
  80. #define O_LARRAY 56
  81. #define O_ARRAY 57
  82. #define O_AELEM 58
  83. #define O_DELETE 59
  84. #define O_LHASH 60
  85. #define O_HASH 61
  86. #define O_HELEM 62
  87. #define O_LAELEM 63
  88. #define O_LHELEM 64
  89. #define O_LSLICE 65
  90. #define O_ASLICE 66
  91. #define O_HSLICE 67
  92. #define O_LASLICE 68
  93. #define O_LHSLICE 69
  94. #define O_SPLICE 70
  95. #define O_PUSH 71
  96. #define O_POP 72
  97. #define O_SHIFT 73
  98. #define O_UNPACK 74
  99. #define O_SPLIT 75
  100. #define O_LENGTH 76
  101. #define O_SPRINTF 77
  102. #define O_SUBSTR 78
  103. #define O_PACK 79
  104. #define O_GREP 80
  105. #define O_JOIN 81
  106. #define O_SLT 82
  107. #define O_SGT 83
  108. #define O_SLE 84
  109. #define O_SGE 85
  110. #define O_SEQ 86
  111. #define O_SNE 87
  112. #define O_SCMP 88
  113. #define O_SUBR 89
  114. #define O_DBSUBR 90
  115. #define O_CALLER 91
  116. #define O_SORT 92
  117. #define O_REVERSE 93
  118. #define O_WARN 94
  119. #define O_DIE 95
  120. #define O_PRTF 96
  121. #define O_PRINT 97
  122. #define O_CHDIR 98
  123. #define O_EXIT 99
  124. #define O_RESET 100
  125. #define O_LIST 101
  126. #define O_EOF 102
  127. #define O_GETC 103
  128. #define O_TELL 104
  129. #define O_RECV 105
  130. #define O_READ 106
  131. #define O_SYSREAD 107
  132. #define O_SYSWRITE 108
  133. #define O_SEND 109
  134. #define O_SEEK 110
  135. #define O_RETURN 111
  136. #define O_REDO 112
  137. #define O_NEXT 113
  138. #define O_LAST 114
  139. #define O_DUMP 115
  140. #define O_GOTO 116
  141. #define O_INDEX 117
  142. #define O_RINDEX 118
  143. #define O_TIME 119
  144. #define O_TMS 120
  145. #define O_LOCALTIME 121
  146. #define O_GMTIME 122
  147. #define O_TRUNCATE 123
  148. #define O_LSTAT 124
  149. #define O_STAT 125
  150. #define O_CRYPT 126
  151. #define O_ATAN2 127
  152. #define O_SIN 128
  153. #define O_COS 129
  154. #define O_RAND 130
  155. #define O_SRAND 131
  156. #define O_EXP 132
  157. #define O_LOG 133
  158. #define O_SQRT 134
  159. #define O_INT 135
  160. #define O_ORD 136
  161. #define O_ALARM 137
  162. #define O_SLEEP 138
  163. #define O_RANGE 139
  164. #define O_F_OR_R 140
  165. #define O_FLIP 141
  166. #define O_FLOP 142
  167. #define O_FORK 143
  168. #define O_WAIT 144
  169. #define O_WAITPID 145
  170. #define O_SYSTEM 146
  171. #define O_EXEC_OP 147
  172. #define O_HEX 148
  173. #define O_OCT 149
  174. #define O_CHOWN 150
  175. #define O_KILL 151
  176. #define O_UNLINK 152
  177. #define O_CHMOD 153
  178. #define O_UTIME 154
  179. #define O_UMASK 155
  180. #define O_MSGGET 156
  181. #define O_SHMGET 157
  182. #define O_SEMGET 158
  183. #define O_MSGCTL 159
  184. #define O_SHMCTL 160
  185. #define O_SEMCTL 161
  186. #define O_MSGSND 162
  187. #define O_MSGRCV 163
  188. #define O_SEMOP 164
  189. #define O_SHMREAD 165
  190. #define O_SHMWRITE 166
  191. #define O_RENAME 167
  192. #define O_LINK 168
  193. #define O_MKDIR 169
  194. #define O_RMDIR 170
  195. #define O_GETPPID 171
  196. #define O_GETPGRP 172
  197. #define O_SETPGRP 173
  198. #define O_GETPRIORITY 174
  199. #define O_SETPRIORITY 175
  200. #define O_CHROOT 176
  201. #define O_FCNTL 177
  202. #define O_IOCTL 178
  203. #define O_FLOCK 179
  204. #define O_UNSHIFT 180
  205. #define O_REQUIRE 181
  206. #define O_DOFILE 182
  207. #define O_EVAL 183
  208. #define O_FTRREAD 184
  209. #define O_FTRWRITE 185
  210. #define O_FTREXEC 186
  211. #define O_FTEREAD 187
  212. #define O_FTEWRITE 188
  213. #define O_FTEEXEC 189
  214. #define O_FTIS 190
  215. #define O_FTEOWNED 191
  216. #define O_FTROWNED 192
  217. #define O_FTZERO 193
  218. #define O_FTSIZE 194
  219. #define O_FTMTIME 195
  220. #define O_FTATIME 196
  221. #define O_FTCTIME 197
  222. #define O_FTSOCK 198
  223. #define O_FTCHR 199
  224. #define O_FTBLK 200
  225. #define O_FTFILE 201
  226. #define O_FTDIR 202
  227. #define O_FTPIPE 203
  228. #define O_FTLINK 204
  229. #define O_SYMLINK 205
  230. #define O_READLINK 206
  231. #define O_FTSUID 207
  232. #define O_FTSGID 208
  233. #define O_FTSVTX 209
  234. #define O_FTTTY 210
  235. #define O_FTTEXT 211
  236. #define O_FTBINARY 212
  237. #define O_SOCKET 213
  238. #define O_BIND 214
  239. #define O_CONNECT 215
  240. #define O_LISTEN 216
  241. #define O_ACCEPT 217
  242. #define O_GHBYNAME 218
  243. #define O_GHBYADDR 219
  244. #define O_GHOSTENT 220
  245. #define O_GNBYNAME 221
  246. #define O_GNBYADDR 222
  247. #define O_GNETENT 223
  248. #define O_GPBYNAME 224
  249. #define O_GPBYNUMBER 225
  250. #define O_GPROTOENT 226
  251. #define O_GSBYNAME 227
  252. #define O_GSBYPORT 228
  253. #define O_GSERVENT 229
  254. #define O_SHOSTENT 230
  255. #define O_SNETENT 231
  256. #define O_SPROTOENT 232
  257. #define O_SSERVENT 233
  258. #define O_EHOSTENT 234
  259. #define O_ENETENT 235
  260. #define O_EPROTOENT 236
  261. #define O_ESERVENT 237
  262. #define O_SOCKPAIR 238
  263. #define O_SHUTDOWN 239
  264. #define O_GSOCKOPT 240
  265. #define O_SSOCKOPT 241
  266. #define O_GETSOCKNAME 242
  267. #define O_GETPEERNAME 243
  268. #define O_SSELECT 244
  269. #define O_FILENO 245
  270. #define O_BINMODE 246
  271. #define O_VEC 247
  272. #define O_GPWNAM 248
  273. #define O_GPWUID 249
  274. #define O_GPWENT 250
  275. #define O_SPWENT 251
  276. #define O_EPWENT 252
  277. #define O_GGRNAM 253
  278. #define O_GGRGID 254
  279. #define O_GGRENT 255
  280. #define O_SGRENT 256
  281. #define O_EGRENT 257
  282. #define O_GETLOGIN 258
  283. #define O_OPEN_DIR 259
  284. #define O_READDIR 260
  285. #define O_TELLDIR 261
  286. #define O_SEEKDIR 262
  287. #define O_REWINDDIR 263
  288. #define O_CLOSEDIR 264
  289. #define O_SYSCALL 265
  290. #define O_PIPE 266
  291. #define O_TRY 267
  292. #define O_EVALONCE 268
  293. #define MAXO 269
  294.  
  295.  
  296. #ifndef DOINIT
  297. extern char *opname[];
  298. #else
  299. char *opname[] = {
  300.     "NULL",
  301.     "RCAT",
  302.     "ITEM",
  303.     "SCALAR",
  304.     "ITEM2",
  305.     "ITEM3",
  306.     "CONCAT",
  307.     "REPEAT",
  308.     "MATCH",
  309.     "NMATCH",
  310.     "SUBST",
  311.     "NSUBST",
  312.     "ASSIGN",
  313.     "LOCAL",
  314.     "AASSIGN",
  315.     "SASSIGN",
  316.     "CHOP",
  317.     "DEFINED",
  318.     "UNDEF",
  319.     "STUDY",
  320.     "POW",
  321.     "MULTIPLY",
  322.     "DIVIDE",
  323.     "MODULO",
  324.     "ADD",
  325.     "SUBTRACT",
  326.     "LEFT_SHIFT",
  327.     "RIGHT_SHIFT",
  328.     "LT",
  329.     "GT",
  330.     "LE",
  331.     "GE",
  332.     "EQ",
  333.     "NE",
  334.     "NCMP",
  335.     "BIT_AND",
  336.     "XOR",
  337.     "BIT_OR",
  338.     "AND",
  339.     "OR",
  340.     "COND_EXPR",
  341.     "COMMA",
  342.     "NEGATE",
  343.     "NOT",
  344.     "COMPLEMENT",
  345.     "SELECT",
  346.     "WRITE",
  347.     "DBMOPEN",
  348.     "DBMCLOSE",
  349.     "OPEN",
  350.     "TRANS",
  351.     "NTRANS",
  352.     "CLOSE",
  353.     "EACH",
  354.     "VALUES",
  355.     "KEYS",
  356.     "LARRAY",
  357.     "ARRAY",
  358.     "AELEM",
  359.     "DELETE",
  360.     "LHASH",
  361.     "HASH",
  362.     "HELEM",
  363.     "LAELEM",
  364.     "LHELEM",
  365.     "LSLICE",
  366.     "ASLICE",
  367.     "HSLICE",
  368.     "LASLICE",
  369.     "LHSLICE",
  370.     "SPLICE",
  371.     "PUSH",
  372.     "POP",
  373.     "SHIFT",
  374.     "UNPACK",
  375.     "SPLIT",
  376.     "LENGTH",
  377.     "SPRINTF",
  378.     "SUBSTR",
  379.     "PACK",
  380.     "GREP",
  381.     "JOIN",
  382.     "SLT",
  383.     "SGT",
  384.     "SLE",
  385.     "SGE",
  386.     "SEQ",
  387.     "SNE",
  388.     "SCMP",
  389.     "SUBR",
  390.     "DBSUBR",
  391.     "CALLER",
  392.     "SORT",
  393.     "REVERSE",
  394.     "WARN",
  395.     "DIE",
  396.     "PRINTF",
  397.     "PRINT",
  398.     "CHDIR",
  399.     "EXIT",
  400.     "RESET",
  401.     "LIST",
  402.     "EOF",
  403.     "GETC",
  404.     "TELL",
  405.     "RECV",
  406.     "READ",
  407.     "SYSREAD",
  408.     "SYSWRITE",
  409.     "SEND",
  410.     "SEEK",
  411.     "RETURN",
  412.     "REDO",
  413.     "NEXT",
  414.     "LAST",
  415.     "DUMP",
  416.     "GOTO",/* shudder */
  417.     "INDEX",
  418.     "RINDEX",
  419.     "TIME",
  420.     "TIMES",
  421.     "LOCALTIME",
  422.     "GMTIME",
  423.     "TRUNCATE",
  424.     "LSTAT",
  425.     "STAT",
  426.     "CRYPT",
  427.     "ATAN2",
  428.     "SIN",
  429.     "COS",
  430.     "RAND",
  431.     "SRAND",
  432.     "EXP",
  433.     "LOG",
  434.     "SQRT",
  435.     "INT",
  436.     "ORD",
  437.     "ALARM",
  438.     "SLEEP",
  439.     "RANGE",
  440.     "FLIP_OR_RANGE",
  441.     "FLIP",
  442.     "FLOP",
  443.     "FORK",
  444.     "WAIT",
  445.     "WAITPID",
  446.     "SYSTEM",
  447.     "EXEC",
  448.     "HEX",
  449.     "OCT",
  450.     "CHOWN",
  451.     "KILL",
  452.     "UNLINK",
  453.     "CHMOD",
  454.     "UTIME",
  455.     "UMASK",
  456.     "MSGGET",
  457.     "SHMGET",
  458.     "SEMGET",
  459.     "MSGCTL",
  460.     "SHMCTL",
  461.     "SEMCTL",
  462.     "MSGSND",
  463.     "MSGRCV",
  464.     "SEMOP",
  465.     "SHMREAD",
  466.     "SHMWRITE",
  467.     "RENAME",
  468.     "LINK",
  469.     "MKDIR",
  470.     "RMDIR",
  471.     "GETPPID",
  472.     "GETPGRP",
  473.     "SETPGRP",
  474.     "GETPRIORITY",
  475.     "SETPRIORITY",
  476.     "CHROOT",
  477.     "FCNTL",
  478.     "SYSIOCTL",
  479.     "FLOCK",
  480.     "UNSHIFT",
  481.     "REQUIRE",
  482.     "DOFILE",
  483.     "EVAL",
  484.     "FTRREAD",
  485.     "FTRWRITE",
  486.     "FTREXEC",
  487.     "FTEREAD",
  488.     "FTEWRITE",
  489.     "FTEEXEC",
  490.     "FTIS",
  491.     "FTEOWNED",
  492.     "FTROWNED",
  493.     "FTZERO",
  494.     "FTSIZE",
  495.     "FTMTIME",
  496.     "FTATIME",
  497.     "FTCTIME",
  498.     "FTSOCK",
  499.     "FTCHR",
  500.     "FTBLK",
  501.     "FTFILE",
  502.     "FTDIR",
  503.     "FTPIPE",
  504.     "FTLINK",
  505.     "SYMLINK",
  506.     "READLINK",
  507.     "FTSUID",
  508.     "FTSGID",
  509.     "FTSVTX",
  510.     "FTTTY",
  511.     "FTTEXT",
  512.     "FTBINARY",
  513.     "SOCKET",
  514.     "BIND",
  515.     "CONNECT",
  516.     "LISTEN",
  517.     "ACCEPT",
  518.     "GHBYNAME",
  519.     "GHBYADDR",
  520.     "GHOSTENT",
  521.     "GNBYNAME",
  522.     "GNBYADDR",
  523.     "GNETENT",
  524.     "GPBYNAME",
  525.     "GPBYNUMBER",
  526.     "GPROTOENT",
  527.     "GSBYNAME",
  528.     "GSBYPORT",
  529.     "GSERVENT",
  530.     "SHOSTENT",
  531.     "SNETENT",
  532.     "SPROTOENT",
  533.     "SSERVENT",
  534.     "EHOSTENT",
  535.     "ENETENT",
  536.     "EPROTOENT",
  537.     "ESERVENT",
  538.     "SOCKPAIR",
  539.     "SHUTDOWN",
  540.     "GSOCKOPT",
  541.     "SSOCKOPT",
  542.     "GETSOCKNAME",
  543.     "GETPEERNAME",
  544.     "SSELECT",
  545.     "FILENO",
  546.     "BINMODE",
  547.     "VEC",
  548.     "GPWNAM",
  549.     "GPWUID",
  550.     "GPWENT",
  551.     "SPWENT",
  552.     "EPWENT",
  553.     "GGRNAM",
  554.     "GGRGID",
  555.     "GGRENT",
  556.     "SGRENT",
  557.     "EGRENT",
  558.     "GETLOGIN",
  559.     "OPENDIR",
  560.     "READDIR",
  561.     "TELLDIR",
  562.     "SEEKDIR",
  563.     "REWINDDIR",
  564.     "CLOSEDIR",
  565.     "SYSCALL",
  566.     "PIPE",
  567.     "TRY",
  568.     "EVALONCE",
  569.     "269"
  570. };
  571. #endif
  572.  
  573.  
  574. #define A_NULL 0
  575. #define A_EXPR 1
  576. #define A_CMD 2
  577. #define A_STAB 3
  578. #define A_LVAL 4
  579. #define A_SINGLE 5
  580. #define A_DOUBLE 6
  581. #define A_BACKTICK 7
  582. #define A_READ 8
  583. #define A_SPAT 9
  584. #define A_LEXPR 10
  585. #define A_ARYLEN 11
  586. #define A_ARYSTAB 12
  587. #define A_LARYLEN 13
  588. #define A_GLOB 14
  589. #define A_WORD 15
  590. #define A_INDREAD 16
  591. #define A_LARYSTAB 17
  592. #define A_STAR 18
  593. #define A_LSTAR 19
  594. #define A_WANTARRAY 20
  595. #define A_LENSTAB 21
  596.  
  597.  
  598. #define A_MASK 31
  599. #define A_DONT 32        /* or this into type to suppress evaluation */
  600.  
  601.  
  602. #ifndef DOINIT
  603. extern char *argname[];
  604. #else
  605. char *argname[] = {
  606.     "A_NULL",
  607.     "EXPR",
  608.     "CMD",
  609.     "STAB",
  610.     "LVAL",
  611.     "SINGLE",
  612.     "DOUBLE",
  613.     "BACKTICK",
  614.     "READ",
  615.     "SPAT",
  616.     "LEXPR",
  617.     "ARYLEN",
  618.     "ARYSTAB",
  619.     "LARYLEN",
  620.     "GLOB",
  621.     "WORD",
  622.     "INDREAD",
  623.     "LARYSTAB",
  624.     "STAR",
  625.     "LSTAR",
  626.     "WANTARRAY",
  627.     "LENSTAB",
  628.     "22"
  629. };
  630. #endif
  631.  
  632.  
  633. #ifndef DOINIT
  634. extern bool hoistable[];
  635. #else
  636. bool hoistable[] =
  637.   {0,    /* A_NULL */
  638.    0,    /* EXPR */
  639.    1,    /* CMD */
  640.    1,    /* STAB */
  641.    0,    /* LVAL */
  642.    1,    /* SINGLE */
  643.    0,    /* DOUBLE */
  644.    0,    /* BACKTICK */
  645.    0,    /* READ */
  646.    0,    /* SPAT */
  647.    0,    /* LEXPR */
  648.    1,    /* ARYLEN */
  649.    1,    /* ARYSTAB */
  650.    0,    /* LARYLEN */
  651.    0,    /* GLOB */
  652.    1,    /* WORD */
  653.    0,    /* INDREAD */
  654.    0,    /* LARYSTAB */
  655.    1,    /* STAR */
  656.    1,    /* LSTAR */
  657.    1,    /* WANTARRAY */
  658.    0,    /* LENSTAB */
  659.    0,    /* 21 */
  660. };
  661. #endif
  662.  
  663.  
  664. union argptr {
  665.     ARG        *arg_arg;
  666.     char    *arg_cval;
  667.     STAB    *arg_stab;
  668.     SPAT    *arg_spat;
  669.     CMD        *arg_cmd;
  670.     STR        *arg_str;
  671.     HASH    *arg_hash;
  672. };
  673.  
  674.  
  675. struct arg {
  676.     union argptr arg_ptr;
  677.     short    arg_len;
  678.     unsigned short arg_type;
  679.     unsigned short arg_flags;
  680. };
  681.  
  682.  
  683. #define AF_ARYOK 1        /* op can handle multiple values here */
  684. #define AF_POST 2        /* post *crement this item */
  685. #define AF_PRE 4        /* pre *crement this item */
  686. #define AF_UP 8            /* increment rather than decrement */
  687. #define AF_COMMON 16        /* left and right have symbols in common */
  688. #define AF_DEPR 32        /* an older form of the construct */
  689. #define AF_LISTISH 64        /* turn into list if important */
  690. #define AF_LOCAL 128        /* list of local variables */
  691.  
  692.  
  693. /*
  694.  * Most of the ARG pointers are used as pointers to arrays of ARG.  When
  695.  * so used, the 0th element is special, and represents the operator to
  696.  * use on the list of arguments following.  The arg_len in the 0th element
  697.  * gives the maximum argument number, and the arg_str is used to store
  698.  * the return value in a more-or-less static location.  Sorry it's not
  699.  * re-entrant (yet), but it sure makes it efficient.  The arg_type of the
  700.  * 0th element is an operator (O_*) rather than an argument type (A_*).
  701.  */
  702.  
  703.  
  704. #define Nullarg Null(ARG*)
  705.  
  706.  
  707. #ifndef DOINIT
  708. EXT unsigned short opargs[MAXO+1];
  709. #else
  710. #define A(e1,e2,e3)        (e1+(e2<<2)+(e3<<4))
  711. #define A5(e1,e2,e3,e4,e5) (e1+(e2<<2)+(e3<<4)+(e4<<6)+(e5<<8))
  712. unsigned short opargs[MAXO+1] = {
  713.     A(0,0,0),    /* NULL */
  714.     A(1,1,0),    /* RCAT */
  715.     A(1,0,0),    /* ITEM */
  716.     A(1,0,0),    /* SCALAR */
  717.     A(0,0,0),    /* ITEM2 */
  718.     A(0,0,0),    /* ITEM3 */
  719.     A(1,1,0),    /* CONCAT */
  720.     A(3,1,0),    /* REPEAT */
  721.     A(1,0,0),    /* MATCH */
  722.     A(1,0,0),    /* NMATCH */
  723.     A(1,0,0),    /* SUBST */
  724.     A(1,0,0),    /* NSUBST */
  725.     A(1,1,0),    /* ASSIGN */
  726.     A(1,0,0),    /* LOCAL */
  727.     A(3,3,0),    /* AASSIGN */
  728.     A(0,0,0),    /* SASSIGN */
  729.     A(3,0,0),    /* CHOP */
  730.     A(1,0,0),    /* DEFINED */
  731.     A(1,0,0),    /* UNDEF */
  732.     A(1,0,0),    /* STUDY */
  733.     A(1,1,0),    /* POW */
  734.     A(1,1,0),    /* MULTIPLY */
  735.     A(1,1,0),    /* DIVIDE */
  736.     A(1,1,0),    /* MODULO */
  737.     A(1,1,0),    /* ADD */
  738.     A(1,1,0),    /* SUBTRACT */
  739.     A(1,1,0),    /* LEFT_SHIFT */
  740.     A(1,1,0),    /* RIGHT_SHIFT */
  741.     A(1,1,0),    /* LT */
  742.     A(1,1,0),    /* GT */
  743.     A(1,1,0),    /* LE */
  744.     A(1,1,0),    /* GE */
  745.     A(1,1,0),    /* EQ */
  746.     A(1,1,0),    /* NE */
  747.     A(1,1,0),    /* NCMP */
  748.     A(1,1,0),    /* BIT_AND */
  749.     A(1,1,0),    /* XOR */
  750.     A(1,1,0),    /* BIT_OR */
  751.     A(1,0,0),    /* AND */
  752.     A(1,0,0),    /* OR */
  753.     A(1,0,0),    /* COND_EXPR */
  754.     A(1,1,0),    /* COMMA */
  755.     A(1,0,0),    /* NEGATE */
  756.     A(1,0,0),    /* NOT */
  757.     A(1,0,0),    /* COMPLEMENT */
  758.     A(1,0,0),    /* SELECT */
  759.     A(1,0,0),    /* WRITE */
  760.     A(1,1,1),    /* DBMOPEN */
  761.     A(1,0,0),    /* DBMCLOSE */
  762.     A(1,1,0),    /* OPEN */
  763.     A(1,0,0),    /* TRANS */
  764.     A(1,0,0),    /* NTRANS */
  765.     A(1,0,0),    /* CLOSE */
  766.     A(0,0,0),    /* EACH */
  767.     A(0,0,0),    /* VALUES */
  768.     A(0,0,0),    /* KEYS */
  769.     A(0,0,0),    /* LARRAY */
  770.     A(0,0,0),    /* ARRAY */
  771.     A(0,1,0),    /* AELEM */
  772.     A(0,1,0),    /* DELETE */
  773.     A(0,0,0),    /* LHASH */
  774.     A(0,0,0),    /* HASH */
  775.     A(0,1,0),    /* HELEM */
  776.     A(0,1,0),    /* LAELEM */
  777.     A(0,1,0),    /* LHELEM */
  778.     A(0,3,3),    /* LSLICE */
  779.     A(0,3,0),    /* ASLICE */
  780.     A(0,3,0),    /* HSLICE */
  781.     A(0,3,0),    /* LASLICE */
  782.     A(0,3,0),    /* LHSLICE */
  783.     A(0,3,1),    /* SPLICE */
  784.     A(0,3,0),    /* PUSH */
  785.     A(0,0,0),    /* POP */
  786.     A(0,0,0),    /* SHIFT */
  787.     A(1,1,0),    /* UNPACK */
  788.     A(1,0,1),    /* SPLIT */
  789.     A(1,0,0),    /* LENGTH */
  790.     A(3,0,0),    /* SPRINTF */
  791.     A(1,1,1),    /* SUBSTR */
  792.     A(1,3,0),    /* PACK */
  793.     A(0,3,0),    /* GREP */
  794.     A(1,3,0),    /* JOIN */
  795.     A(1,1,0),    /* SLT */
  796.     A(1,1,0),    /* SGT */
  797.     A(1,1,0),    /* SLE */
  798.     A(1,1,0),    /* SGE */
  799.     A(1,1,0),    /* SEQ */
  800.     A(1,1,0),    /* SNE */
  801.     A(1,1,0),    /* SCMP */
  802.     A(0,3,0),    /* SUBR */
  803.     A(0,3,0),    /* DBSUBR */
  804.     A(1,0,0),    /* CALLER */
  805.     A(1,3,0),    /* SORT */
  806.     A(0,3,0),    /* REVERSE */
  807.     A(0,3,0),    /* WARN */
  808.     A(0,3,0),    /* DIE */
  809.     A(1,3,0),    /* PRINTF */
  810.     A(1,3,0),    /* PRINT */
  811.     A(1,0,0),    /* CHDIR */
  812.     A(1,0,0),    /* EXIT */
  813.     A(1,0,0),    /* RESET */
  814.     A(3,0,0),    /* LIST */
  815.     A(1,0,0),    /* EOF */
  816.     A(1,0,0),    /* GETC */
  817.     A(1,0,0),    /* TELL */
  818.     A5(1,1,1,1,0),    /* RECV */
  819.     A(1,1,3),    /* READ */
  820.     A(1,1,3),    /* SYSREAD */
  821.     A(1,1,3),    /* SYSWRITE */
  822.     A(1,1,3),    /* SEND */
  823.     A(1,1,1),    /* SEEK */
  824.     A(0,3,0),    /* RETURN */
  825.     A(0,0,0),    /* REDO */
  826.     A(0,0,0),    /* NEXT */
  827.     A(0,0,0),    /* LAST */
  828.     A(0,0,0),    /* DUMP */
  829.     A(0,0,0),    /* GOTO */
  830.     A(1,1,1),    /* INDEX */
  831.     A(1,1,1),    /* RINDEX */
  832.     A(0,0,0),    /* TIME */
  833.     A(0,0,0),    /* TIMES */
  834.     A(1,0,0),    /* LOCALTIME */
  835.     A(1,0,0),    /* GMTIME */
  836.     A(1,1,0),    /* TRUNCATE */
  837.     A(1,0,0),    /* LSTAT */
  838.     A(1,0,0),    /* STAT */
  839.     A(1,1,0),    /* CRYPT */
  840.     A(1,1,0),    /* ATAN2 */
  841.     A(1,0,0),    /* SIN */
  842.     A(1,0,0),    /* COS */
  843.     A(1,0,0),    /* RAND */
  844.     A(1,0,0),    /* SRAND */
  845.     A(1,0,0),    /* EXP */
  846.     A(1,0,0),    /* LOG */
  847.     A(1,0,0),    /* SQRT */
  848.     A(1,0,0),    /* INT */
  849.     A(1,0,0),    /* ORD */
  850.     A(1,0,0),    /* ALARM */
  851.     A(1,0,0),    /* SLEEP */
  852.     A(1,1,0),    /* RANGE */
  853.     A(1,0,0),    /* F_OR_R */
  854.     A(1,0,0),    /* FLIP */
  855.     A(0,1,0),    /* FLOP */
  856.     A(0,0,0),    /* FORK */
  857.     A(0,0,0),    /* WAIT */
  858.     A(1,1,0),    /* WAITPID */
  859.     A(1,3,0),    /* SYSTEM */
  860.     A(1,3,0),    /* EXEC */
  861.     A(1,0,0),    /* HEX */
  862.     A(1,0,0),    /* OCT */
  863.     A(0,3,0),    /* CHOWN */
  864.     A(0,3,0),    /* KILL */
  865.     A(0,3,0),    /* UNLINK */
  866.     A(0,3,0),    /* CHMOD */
  867.     A(0,3,0),    /* UTIME */
  868.     A(1,0,0),    /* UMASK */
  869.     A(1,1,0),    /* MSGGET */
  870.     A(1,1,1),    /* SHMGET */
  871.     A(1,1,1),    /* SEMGET */
  872.     A(1,1,1),    /* MSGCTL */
  873.     A(1,1,1),    /* SHMCTL */
  874.     A5(1,1,1,1,0),    /* SEMCTL */
  875.     A(1,1,1),    /* MSGSND */
  876.     A5(1,1,1,1,1),    /* MSGRCV */
  877.     A(1,1,1),    /* SEMOP */
  878.     A5(1,1,1,1,0),    /* SHMREAD */
  879.     A5(1,1,1,1,0),    /* SHMWRITE */
  880.     A(1,1,0),    /* RENAME */
  881.     A(1,1,0),    /* LINK */
  882.     A(1,1,0),    /* MKDIR */
  883.     A(1,0,0),    /* RMDIR */
  884.     A(0,0,0),    /* GETPPID */
  885.     A(1,0,0),    /* GETPGRP */
  886.     A(1,1,0),    /* SETPGRP */
  887.     A(1,1,0),    /* GETPRIORITY */
  888.     A(1,1,1),    /* SETPRIORITY */
  889.     A(1,0,0),    /* CHROOT */
  890.     A(1,1,1),    /* FCNTL */
  891.     A(1,1,1),    /* SYSIOCTL */
  892.     A(1,1,0),    /* FLOCK */
  893.     A(0,3,0),    /* UNSHIFT */
  894.     A(1,0,0),    /* REQUIRE */
  895.     A(1,0,0),    /* DOFILE */
  896.     A(1,0,0),    /* EVAL */
  897.     A(1,0,0),    /* FTRREAD */
  898.     A(1,0,0),    /* FTRWRITE */
  899.     A(1,0,0),    /* FTREXEC */
  900.     A(1,0,0),    /* FTEREAD */
  901.     A(1,0,0),    /* FTEWRITE */
  902.     A(1,0,0),    /* FTEEXEC */
  903.     A(1,0,0),    /* FTIS */
  904.     A(1,0,0),    /* FTEOWNED */
  905.     A(1,0,0),    /* FTROWNED */
  906.     A(1,0,0),    /* FTZERO */
  907.     A(1,0,0),    /* FTSIZE */
  908.     A(1,0,0),    /* FTMTIME */
  909.     A(1,0,0),    /* FTATIME */
  910.     A(1,0,0),    /* FTCTIME */
  911.     A(1,0,0),    /* FTSOCK */
  912.     A(1,0,0),    /* FTCHR */
  913.     A(1,0,0),    /* FTBLK */
  914.     A(1,0,0),    /* FTFILE */
  915.     A(1,0,0),    /* FTDIR */
  916.     A(1,0,0),    /* FTPIPE */
  917.     A(1,0,0),    /* FTLINK */
  918.     A(1,1,0),    /* SYMLINK */
  919.     A(1,0,0),    /* READLINK */
  920.     A(1,0,0),    /* FTSUID */
  921.     A(1,0,0),    /* FTSGID */
  922.     A(1,0,0),    /* FTSVTX */
  923.     A(1,0,0),    /* FTTTY */
  924.     A(1,0,0),    /* FTTEXT */
  925.     A(1,0,0),    /* FTBINARY */
  926.     A5(1,1,1,1,0),    /* SOCKET */
  927.     A(1,1,0),    /* BIND */
  928.     A(1,1,0),    /* CONNECT */
  929.     A(1,1,0),    /* LISTEN */
  930.     A(1,1,0),    /* ACCEPT */
  931.     A(1,0,0),    /* GHBYNAME */
  932.     A(1,1,0),    /* GHBYADDR */
  933.     A(0,0,0),    /* GHOSTENT */
  934.     A(1,0,0),    /* GNBYNAME */
  935.     A(1,1,0),    /* GNBYADDR */
  936.     A(0,0,0),    /* GNETENT */
  937.     A(1,0,0),    /* GPBYNAME */
  938.     A(1,0,0),    /* GPBYNUMBER */
  939.     A(0,0,0),    /* GPROTOENT */
  940.     A(1,1,0),    /* GSBYNAME */
  941.     A(1,1,0),    /* GSBYPORT */
  942.     A(0,0,0),    /* GSERVENT */
  943.     A(1,0,0),    /* SHOSTENT */
  944.     A(1,0,0),    /* SNETENT */
  945.     A(1,0,0),    /* SPROTOENT */
  946.     A(1,0,0),    /* SSERVENT */
  947.     A(0,0,0),    /* EHOSTENT */
  948.     A(0,0,0),    /* ENETENT */
  949.     A(0,0,0),    /* EPROTOENT */
  950.     A(0,0,0),    /* ESERVENT */
  951.     A5(1,1,1,1,1),    /* SOCKPAIR */
  952.     A(1,1,0),    /* SHUTDOWN */
  953.     A(1,1,1),    /* GSOCKOPT */
  954.     A5(1,1,1,1,0),    /* SSOCKOPT */
  955.     A(1,0,0),    /* GETSOCKNAME */
  956.     A(1,0,0),    /* GETPEERNAME */
  957.     A5(1,1,1,1,0),    /* SSELECT */
  958.     A(1,0,0),    /* FILENO */
  959.     A(1,0,0),    /* BINMODE */
  960.     A(1,1,1),    /* VEC */
  961.     A(1,0,0),    /* GPWNAM */
  962.     A(1,0,0),    /* GPWUID */
  963.     A(0,0,0),    /* GPWENT */
  964.     A(0,0,0),    /* SPWENT */
  965.     A(0,0,0),    /* EPWENT */
  966.     A(1,0,0),    /* GGRNAM */
  967.     A(1,0,0),    /* GGRGID */
  968.     A(0,0,0),    /* GGRENT */
  969.     A(0,0,0),    /* SGRENT */
  970.     A(0,0,0),    /* EGRENT */
  971.     A(0,0,0),    /* GETLOGIN */
  972.     A(1,1,0),    /* OPENDIR */
  973.     A(1,0,0),    /* READDIR */
  974.     A(1,0,0),    /* TELLDIR */
  975.     A(1,1,0),    /* SEEKDIR */
  976.     A(1,0,0),    /* REWINDDIR */
  977.     A(1,0,0),    /* CLOSEDIR */
  978.     A(1,3,0),    /* SYSCALL */
  979.     A(1,1,0),    /* PIPE */
  980.     A(0,0,0),    /* TRY */
  981.     A(1,0,0),    /* EVALONCE */
  982.     0
  983. };
  984. #undef A
  985. #undef A5
  986. #endif
  987.  
  988.  
  989. int do_trans();
  990. int do_split();
  991. bool do_eof();
  992. long do_tell();
  993. bool do_seek();
  994. int do_tms();
  995. int do_time();
  996. int do_stat();
  997. STR *do_push();
  998. FILE *nextargv();
  999. STR *do_fttext();
  1000. int do_slice();
  1001.